function interaction = component_interaction( obj, k, q )
%MAKE_INTERACTION Summary of this function goes here
%   Detailed explanation goes here
    comp_k = obj.component{k};
    comp_q = obj.component{q};

    % freq_diff = abs(comp_k.frequency - comp_q.frequency);
    % if freq_diff > MAX_FREQ_DIFF
        % interaction = Interaction.EmptyInteraction(comp_k, comp_q);
    % else
    type_pair = [comp_k.stuff.type, '-', comp_q.stuff.type];
    switch type_pair
      case 'vapor-beam'
        interaction = Interaction.VaporBeamInteraction(comp_k, comp_q, obj.vapor_beam_approximation);
      case 'beam-vapor'
        interaction = Interaction.VaporBeamInteraction(comp_q, comp_k, obj.vapor_beam_approximation);
      case 'vapor-vapor'
        interaction = Interaction.VaporVaporInteraction(comp_k, comp_q);
      case 'vapor-buffer'
        interaction = Interaction.VaporBufferInteraction(comp_k, comp_q);
      case 'buffer-vapor'
        interaction = Interaction.VaporBufferInteraction(comp_q, comp_k);
      case 'vapor-noble'
        interaction = Interaction.VaporNobleInteraction(comp_k, comp_q);
      case 'noble-vapor'
        interaction = Interaction.VaporNobleInteraction(comp_q, comp_k);
      case {'beam-beam', 'beam-buffer', 'beam-noble', 'buffer-buffer', 'buffer-noble', 'noble-noble'}
        interaction = Interaction.EmptyInteraction(comp_k, comp_q);
      otherwise
        interaction = Interaction.EmptyInteraction(comp_k, comp_q);
        warning('non-supported types (%d, %d) %s', [k, q, type_pair]);
    end
    % end

end
